/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package accesodatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

/**
 *
 * @author Ana Maria
 */
public class Departamento {

    FachadaDW dw = new FachadaDW();

    public String ConstruirConsultPorDepartamentos(boolean porAño, boolean porMes, String año, String mes) {

        String consulta = "";


        String SQL_HEADER = "SELECT ResultsACE.consultas+ResultsAC.consultas+ResultsAU.consultas+ResultsAH.consultas promedio, \n"
                + " (SELECT departamento from departamento D join ciudad C ON c.id_departamento = D.id_departamento where id_ciudad = ResultsAC.ciudad)data ";

        String SQL_RESULTS_ACE = "FROM (select Count(DI.id_ips) consultas, DI.id_ciudad Ciudad from atencion_cita_especializada ACE JOIN dimension_ips DI ON  DI.id_ips = ACE.id_ips ";
        String SQL_RESULTS_ACE_GROUP_BY = "group by DI.id_ciudad) ResultsACE JOIN ";

        String SQL_RESULTS_AC = "(SELECT COUNT(DI.id_ips) consultas, DI.id_ciudad ciudad from atencion_citas AC JOIN dimension_ips DI ON DI.id_ips = AC.id_ips ";
        String SQL_RESULTS_AC_GROUP_BY = "group by DI.id_ciudad )ResultsAC ON ResultsACE.ciudad = ResultsAC.ciudad JOIN ";

        String SQL_RESULTS_AU = "(SELECT COUNT(DI.id_ips) consultas, DI.id_ciudad ciudad from atencion_urgencias AU JOIN dimension_ips DI ON DI.id_ips = AU.id_ips ";
        String SQL_RESULTS_AU_GROUP_BY = "group by DI.id_ciudad order by consultas desc )ResultsAU ON ResultsAU.ciudad = ResultsAU.ciudad JOIN ";

        String SQL_RESULTS_AH = "(SELECT COUNT(DI.id_ips) consultas, DI.id_ciudad ciudad from atencion_hospitalizacion AH JOIN dimension_ips DI ON DI.id_ips = AH.id_ips ";
        String SQL_RESULTS_AH_GROUP_BY = "group by DI.id_ciudad order by consultas desc)ResultsAH group by data order BY promedio desc;";

        String clauseWhereACE = " WHERE ";
        String clauseWhereAC = " WHERE ";
        String clauseWhereAU = " WHERE ";
        String clauseWhereAH = " WHERE ";

        if (porAño && !porMes) {

            if (año.equals("Todos")) {

                clauseWhereACE = "";
                clauseWhereAC = "";
                clauseWhereAU = "";
                clauseWhereAH = "";


            } else {

                clauseWhereACE += "(SELECT anio from fecha where k_fecha = ACE.id_fecha_atencion) = '" + año + "' ";
                clauseWhereAC += " (SELECT anio from fecha where k_fecha = AC.id_fecha_atencion)   = '" + año + "' ";
                clauseWhereAU += " (SELECT anio from fecha where k_fecha = AU.id_fecha_atencion)   = '" + año + "' ";
                clauseWhereAH += " (SELECT anio from fecha where k_fecha = AH.id_fecha_atencion)  = '" + año + "' ";

            }

        } else if (porMes && !porAño) {

            if (mes.equals("Todos")) {

                clauseWhereACE = "";
                clauseWhereAC = "";
                clauseWhereAU = "";
                clauseWhereAH = "";


            } else {

                clauseWhereACE += "(SELECT mes from fecha where k_fecha = ACE.id_fecha_atencion) =  '" + mes + "' ";
                clauseWhereAC += " (SELECT mes from fecha where k_fecha = AC.id_fecha_atencion)  =  '" + mes + "' ";
                clauseWhereAU += " (SELECT mes from fecha where k_fecha = AU.id_fecha_atencion)  =  '" + mes + "' ";
                clauseWhereAH += " (SELECT mes from fecha where k_fecha = AH.id_fecha_atencion) =  '" + mes + "' ";



            }


        } else if (porAño && porMes) {

            if (año.equals("Todos")) {
                if (mes.equals("Todos")) {

                    clauseWhereACE = "";
                    clauseWhereAC = "";
                    clauseWhereAU = "";
                    clauseWhereAH = "";


                } else {

                    clauseWhereACE += "(SELECT mes from fecha where k_fecha = ACE.id_fecha_atencion) =  '" + mes + "' ";
                    clauseWhereAC += " (SELECT mes from fecha where k_fecha = AC.id_fecha_atencion)  =  '" + mes + "' ";
                    clauseWhereAU += " (SELECT mes from fecha where k_fecha = AU.id_fecha_atencion)  =  '" + mes + "' ";
                    clauseWhereAH += " (SELECT mes from fecha where k_fecha = AH.id_fecha_atencion) =  '" + mes + "' ";


                }

            } else {

                if (mes.equals("Todos")) {

                    clauseWhereACE += "(SELECT anio from fecha where k_fecha = ACE.id_fecha_atencion) = '" + año + "' ";
                    clauseWhereAC += " (SELECT anio from fecha where k_fecha = AC.id_fecha_atencion)   = '" + año + "' ";
                    clauseWhereAU += " (SELECT anio from fecha where k_fecha = AU.id_fecha_atencion)   = '" + año + "' ";
                    clauseWhereAH += " (SELECT anio from fecha where k_fecha = AH.id_fecha_atencion)  = '" + año + "' ";




                } else {

                    clauseWhereACE += "(SELECT anio from fecha where k_fecha = ACE.id_fecha_atencion) = '" + año + "' AND";
                    clauseWhereAC += " (SELECT anio from fecha where k_fecha = AC.id_fecha_atencion)   = '" + año + "' AND";
                    clauseWhereAU += " (SELECT anio from fecha where k_fecha = AU.id_fecha_atencion)   = '" + año + "' AND";
                    clauseWhereAH += " (SELECT anio from fecha where k_fecha = AH.id_fecha_atencion)  = '" + año + "' AND";


                    clauseWhereACE += "(SELECT mes from fecha where k_fecha = ACE.id_fecha_atencion) =  '" + mes + "' ";
                    clauseWhereAC += " (SELECT mes from fecha where k_fecha = AC.id_fecha_atencion)  =  '" + mes + "' ";
                    clauseWhereAU += " (SELECT mes from fecha where k_fecha = AU.id_fecha_atencion)  =  '" + mes + "' ";
                    clauseWhereAH += " (SELECT mes from fecha where k_fecha = AH.id_fecha_atencion) =  '" + mes + "' ";



                }

            }


        } else {

            clauseWhereACE = "";
            clauseWhereAC = "";
            clauseWhereAU = "";
            clauseWhereAH = "";


        }

        SQL_RESULTS_ACE += clauseWhereACE + SQL_RESULTS_ACE_GROUP_BY;
        SQL_RESULTS_AC += clauseWhereAC + SQL_RESULTS_AC_GROUP_BY;
        SQL_RESULTS_AU += clauseWhereAU + SQL_RESULTS_AU_GROUP_BY;
        SQL_RESULTS_AH += clauseWhereAH + SQL_RESULTS_AH_GROUP_BY;


        consulta += SQL_HEADER + SQL_RESULTS_ACE + SQL_RESULTS_AC + SQL_RESULTS_AU + SQL_RESULTS_AH;

        System.out.println(consulta);

        return consulta;

    }

    public void CrearGraficoDeBarras(String series, String title, String infoX, String infoY) {

        DefaultCategoryDataset data = new DefaultCategoryDataset();

        try {
            Connection con = dw.conectar();
            Statement statement = con.createStatement();
            ResultSet set = statement.executeQuery(series);

            while (set.next()) {

                data.setValue(set.getInt("promedio"), set.getString("data"), "");
            }

            JFreeChart chart = ChartFactory.createBarChart3D(title, infoX, infoY, data, PlotOrientation.VERTICAL, true, true, true);

            ChartFrame frame = new ChartFrame("Resultado", chart);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        } catch (SQLException ex) {

            System.out.println(ex);
        }

    }

    public void CrearGraficoDePastel(String series, String title) {



        DefaultPieDataset pie = new DefaultPieDataset();


        try {
            Connection con = dw.conectar();
            Statement statement = con.createStatement();
            ResultSet set = statement.executeQuery(series);

            while (set.next()) {

                pie.setValue(set.getString("data"), set.getInt("promedio"));
            }

            JFreeChart chart = ChartFactory.createPieChart3D(title, // Title
                    pie, // Dataset
                    true, // Show legend
                    true, // Use tooltips
                    false // Configure chart to generate URLs?
                    );

            ChartFrame frame = new ChartFrame("Resultado", chart);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        } catch (SQLException ex) {

            System.out.println(ex);
        } catch (Exception w) {

            System.out.println(w);

        }




    }

    public static void main(String args[]) {

        Departamento dep = new Departamento();
        String co = dep.ConstruirConsultPorDepartamentos(true, false, "2006", "Todos");
        dep.CrearGraficoDeBarras(co, "Colombia Saludable - Resultados Consulta", "Departamentos", "Demanda de pacientes");
        
        dep.CrearGraficoDePastel(co, "Colombia Saludable - Resultados Consulta");
        
        

    }
}
